به تازگی مقالهای را مطالعه کردهام که حاوی نكتههايي برای افزایش معلومات برنامهنویسی و تبدیلشدن به یک توسعهدهنده واقعی بود. خواندن این مقاله، مفهومی را که مدتی مرا درگیر خود ساخته بود و البته گاهگداری هم درباره آن مطالبي خوانده بودم، در ذهنم زنده کرد: فاصله فرهنگی و مهارتی بزرگی بین «توسعهدهندگان حرفهای کد» و «دانشمندان علوم کامپیوتر» وجود دارد! درست است که توصیههاي ارائهشده در مقاله مذکور برای افزایش سطح معلومات و مهارتها بهعنوان یک توسعهدهنده، از جمله نوشتن کد به زبان اسمبلی، نوشتن برنامههاي موبایل، تمرین با SICP و...، سودمند و جالب هستند، اما برای تبدیل افراد به مدیران فنی کارا کافی نخواهند بود. سروکله زدن تماموقت با جاوااسكريپت یا فهمیدن مزایا و معایب تمپلیتها در ++C، با اینکه مناسب هستند، اما تأثیر کمی بر قابلیت حل مسئله فرد و توسعه کد مناسب و باکیفیت خواهندداشت. برای توسعهدهنده حرفهایشدن مهارتهاي مهمتر و بسیار متفاوتی لازم است.
«بزرگ فکر کن» در برابر «انجامش بده»
در جایگاه کلی ميتوان افرادی را یافت که نقش یک دانشمند علومکامپیوتر یا مهندس نرمافزار را به خوبی ایفا ميکنند و در این مقام، از بهترین جایگاه نظریهپردازی و ارائه راهحل برای مشکلات جدید برخوردارند، اما واقعاً توانایی کدنویسی هزاران خطبرنامه به زبان جاوا را برای تحویل در یک موعد مقرر ندارند. این افراد همانهایی هستند که در صورتی که از قوانین syntax یا وراثت در ++C از آنها سؤال شود، عدم توانایی پاسخ دادن آنها باعث شرمندگی خواهد بود، اما راهحلهاي پیشرفتهاي را برای حل مسائل پیچیده ارائه ميكنند. توجه کنید که یک دانشمند در حوزه علومکامپیوتر، یک فرد تحصیلکرده در سطح دکترای تخصصی نیست، اگرچه داشتن چنین مدرکی مفید خواهد بود، اما هر کسی که بتواند خاص بیاندیشد، منابع علمی را مطالعه کند، بهطور مؤثر از طراحی آزمایشی استفادهکند و مسائل حل نشده را تشخیصدهد یک دانشمند علوم کامپیوتر به شمار خواهد آمد.
اما یکی از مهمترین تفاوتهایی که یک دانشمند را از یک توسعهدهنده جداميکند، سرعت تغییرات است. دانشگاهیان عموماً برای مدتهای مدیدی در محافل آکادمیک مشغول تحصیل و تحقیق بودهاند و با سرعتی کند، مدتها برای حل مسئلههاي بسیار مهم، وقتميگذرانند تا با موشکافی بسیار زیاد، یک راهحل زیبا، عمومی و مناسب برای آن بیابند. در نقطه مقابل، در صنعت سرعت تغییرات بسیار زیاد است و در بيشتر مواقع، باید یک مسئله را چنان مناسب و سریع حلکرد که امکان رسیدن به مشکل بعدی و حل آن فراهم شود. در بسیاری از موارد، سختگیریها و موشکافیهاي آکادمیک یک دانشگاهی مشغول در صنعت همکاران وی را که با فرهنگ «کد بنویس و جلو برو» همخوانی بیشتری دارند، خسته ميکند و به مشکلات عدیدهاي منجر ميشود. یکی دیگر از جنبههاي تفاوت دانشمندان با توسعهدهندگان، میزان توقع و رضایت آنها از نحوه حل مسائل و گذرکردن راهحل مذکور از آزمايشهاي مختلف است. توسعهدهندگان اغلب راهحل خود را به سرعت و در چند حالت معمولی آزمايشميکنند و در صورت جوابدادن، به سرعت به مراحلبعدی ميروند. آنها بسیار گرفتارتر از آن هستند که موشکافانه راهحلهاي خود را بررسیکنند و برای آزمايش هر واحد، زمان بسیاری بگذارند. در مقابل، یک دانشمند در محافل تحقیقاتی ميتواند ماهها به ارزیابی عملکرد کدتوسعهداده شده بپردازد تا گرافهایی مناسب برای اثبات بهتر بودن راهحل ارائهشده، در مقابل دیگر راهحلهای موجود در محافل علمی بهدست آورد و در نهایت آن را به مجلههاي علمی ارائه کرده و قدمی در راستای پیش بردن مرزهای علم برداشته باشد.
نمونه اتفاقی در مقابل راهحلهاي قویاز سوی دیگر، یکی از چیزهایی که دانشمندان کامپیوتر در اغلب اوقات در آن خوب نیستند، توسعه و تولید کد باکیفیت است. شوخی رايج در میان بيشتر دانشگاهیان اين است: «کد نوشتن آنها به طوری شل و ول است که به محض گذشتن مهلت مقاله، برنامه آنها از هم فرو ميپاشد. توسعه کدی که واقعاً قوی، مقیاسپذیر، قابلنگهداری، مستند شده، به خوبی آزمايششده و پیادهسازی شده با استفاده از بهترین شیوهها باشد، کاری نیست که دانشگاهیان برای آن تربیت ميشوند! لذتبردن از کار با مهندسان نرمافزارحرفهاي که هیچ مشکلی در اشاره به اشتباهات کاملاً واضح در کد یا پیشنهاد یک رویکرد پاکتر و ظریفتر در توسعه را ندارند، چیزی است که هیچ دانشگاهی علوم کامپیوتری نباید آن را از دست دهد.
بنابراین، موارد و نكتههاي بسیاری وجود دارند که دانشمندان کامپیوتر ميتوانند درباره نوشتن «واقعی» نرمافزار به جای نمونههاي اولیه شل و ول از توسعه دهندگان حرفهاي کد یاد بگیرند و در امور تحقیقاتی خود بهکار برند. شاید بتوان با این اوصاف، ترکیب دانشمندان و توسعهدهندگان حرفهاي کد در قالب تیمهاي مشترک و ایجاد تعادل بین سرعت یاکیفیت توسعه و تحقیقات و ارزیابیهاي دانشگاهی سختگیرانه را بهترین راهحل برای مجموعههاي صنعتی و دانشگاهی دانست تا تمام امور و روالهاي لازم برای توسعه، به صورت بهینه به انجام برسند.
پينوشت:
|